ci: deterministic docs checks to replace Mintlify Automate workflows#15
Conversation
Free, no-AI GitHub Actions replacing the deterministic Mintlify Automate workflows: - spelling.yml + _typos.toml: spell-check on PRs (blocking; high precision) - prose-style.yml + .vale.ini + .github/styles/Sei: style-guide and grammar linting derived from AGENTS.md and STYLE_GUIDE.md (advisory, changed lines only, so the existing heading backlog doesn't create noise) - seo-audit.yml + scripts/audit-seo.mjs: title/description + page-structure audit over docs.json pages (blocks only on missing metadata) - external-links.yml + lychee.toml: scheduled external link-rot check that opens an issue; complements the existing mint broken-links workflow Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Surfaced by the new typos check: - node/statesync.mdx: sycing -> syncing - evm/reference.mdx: hexdecimal -> hexadecimal - evm/evm-verify-contracts.mdx: Prerequsite -> Prerequisite Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PR SummaryLow Risk Overview CI & config: New workflows run typos ( Content fixes: Three typos in MDX ( Reviewed by Cursor Bugbot for commit fc0ec5d. Bugbot is set up for automated code reviews on this repo. Configure here. |
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 3 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit fc0ec5d. Configure here.
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Check spelling | ||
| uses: crate-ci/typos@master |
There was a problem hiding this comment.
Unpinned GitHub Action uses mutable branch reference
Medium Severity
crate-ci/typos@master is pinned to a mutable branch, not a specific commit SHA or release tag. Any push to the upstream master branch — including a supply-chain compromise — would automatically execute in this repo's CI. The crate-ci/typos docs themselves recommend pinning to a version tag (e.g., @v1.45.0). The PR description acknowledges this but defers the fix, leaving the window open.
Reviewed by Cursor Bugbot for commit fc0ec5d. Configure here.
| } | ||
| walk(navigation); | ||
| return Array.from(new Set(pages)); | ||
| } |
There was a problem hiding this comment.
Duplicated collectPages function across two scripts
Low Severity
The collectPages function in audit-seo.mjs is a verbatim copy of the identical function in scripts/generate-llms.mjs. If the docs.json navigation structure evolves (e.g., a new key is added alongside pages/groups/tabs), the fix would need to be applied in both places independently. Extracting it into a shared utility module would keep them in sync.
Reviewed by Cursor Bugbot for commit fc0ec5d. Configure here.
| tokens: | ||
| - 'click here' | ||
| - '\[here\]\(' | ||
| - '\[this link\]\(' |
There was a problem hiding this comment.
Vale existence tokens can't match raw markdown syntax
Low Severity
The tokens '\[here\]\(' and '\[this link\]\(' attempt to match raw markdown link syntax like [here](url). However, Vale's existence extension operates on the processed text scope by default, not raw markup. Vale strips markdown syntax before matching, so the brackets and parentheses in these patterns will never appear in the text being checked, making both tokens effectively dead. The first token 'click here' works fine since it's plain text. To catch standalone [here](…) links, a scope: raw directive or a different rule extension would be needed.
Reviewed by Cursor Bugbot for commit fc0ec5d. Configure here.


What
Replaces the deterministic Mintlify "Automate" workflows with free, no-AI GitHub Actions. Anything that doesn't need an LLM to judge or write shouldn't cost AI credits — link-checking, spelling, SEO-metadata auditing, and style-guide rules are all deterministic.
Every config here was tuned by running the actual tool over our content, not written blind.
Checks added
spelling.yml+_typos.tomlprose-style.yml+.vale.ini+.github/styles/Seiseo-audit.yml+scripts/audit-seo.mjsexternal-links.yml+lychee.tomlmint broken-linksAGENTS.mdandSTYLE_GUIDE.md(terminology like "gas fees" → "gas",CW→ CosmWasm, sentence-case headings, qualifying language).docs.jsonnavigation walk fromscripts/generate-llms.mjs, so it only checks published pages.external-links.ymlchecks only external hosts (blog.sei.io,dashboard.sei.io, third-party); internal links remainmint broken-links' job.Verification (run locally over the full repo)
maxiumumandUPnPare allowlisted because they come from the auto-generated seid config block innode/node-operators.mdx(fixing them would be reverted bysync-default-configs.yml).Typo fixes included
Surfaced by the new spelling check (kept in a separate commit):
node/statesync.mdx:sycing→syncingevm/reference.mdx:hexdecimal→hexadecimalevm/evm-verify-contracts.mdx:Prerequsite→PrerequisiteAfter merge — Mintlify toggles to turn off
Fix broken links (already covered), Audit SEO metadata, Fix grammar & typos, Apply style guide. The two "Draft improvements from assistant conversations / user feedback" workflows stay on Mintlify — their data lives in the platform and genuinely needs AI.
Notes
crate-ci/typos@masteris unpinned (Mintlify's docs recommend it that way); can pin to a SHA if preferred.external-links.ymlruns weekly and opens a fresh issue each failing week; easy to switch to monthly or a rolling issue.🤖 Generated with Claude Code